diff --git a/system/libraries/User_agent.php b/system/libraries/User_agent.php
index a7c7a76..00cbf69 100644
--- a/system/libraries/User_agent.php
+++ b/system/libraries/User_agent.php
@@ -29,25 +29,25 @@
 class CI_User_agent {
 
 	var $agent		= NULL;
-	
+
 	var $is_browser	= FALSE;
 	var $is_robot	= FALSE;
 	var $is_mobile	= FALSE;
 
 	var $languages	= array();
 	var $charsets	= array();
-	
+
 	var $platforms	= array();
 	var $browsers	= array();
 	var $mobiles	= array();
 	var $robots		= array();
-	
+
 	var $platform	= '';
 	var $browser	= '';
 	var $version	= '';
 	var $mobile		= '';
 	var $robot		= '';
-	
+
 	/**
 	 * Constructor
 	 *
@@ -55,14 +55,14 @@
 	 *
 	 * @access	public
 	 * @return	void
-	 */		
+	 */
 	function CI_User_agent()
 	{
 		if (isset($_SERVER['HTTP_USER_AGENT']))
 		{
 			$this->agent = trim($_SERVER['HTTP_USER_AGENT']);
 		}
-		
+
 		if ( ! is_null($this->agent))
 		{
 			if ($this->_load_agent_file())
@@ -70,27 +70,27 @@
 				$this->_compile_data();
 			}
 		}
-		
+
 		log_message('debug', "User Agent Class Initialized");
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Compile the User Agent Data
 	 *
 	 * @access	private
 	 * @return	bool
-	 */		
+	 */
 	function _load_agent_file()
 	{
 		if ( ! @include(APPPATH.'config/user_agents'.EXT))
 		{
 			return FALSE;
 		}
-		
+
 		$return = FALSE;
-		
+
 		if (isset($platforms))
 		{
 			$this->platforms = $platforms;
@@ -111,7 +111,7 @@
 			unset($mobiles);
 			$return = TRUE;
 		}
-		
+
 		if (isset($robots))
 		{
 			$this->robots = $robots;
@@ -121,36 +121,36 @@
 
 		return $return;
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Compile the User Agent Data
 	 *
 	 * @access	private
 	 * @return	bool
-	 */		
+	 */
 	function _compile_data()
 	{
 		$this->_set_platform();
-	
+
 		foreach (array('_set_browser', '_set_robot', '_set_mobile') as $function)
 		{
 			if ($this->$function() === TRUE)
 			{
 				break;
 			}
-		}	
+		}
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Set the Platform
 	 *
 	 * @access	private
 	 * @return	mixed
-	 */		
+	 */
 	function _set_platform()
 	{
 		if (is_array($this->platforms) AND count($this->platforms) > 0)
@@ -168,19 +168,19 @@
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Set the Browser
 	 *
 	 * @access	private
 	 * @return	bool
-	 */		
+	 */
 	function _set_browser()
 	{
 		if (is_array($this->browsers) AND count($this->browsers) > 0)
 		{
 			foreach ($this->browsers as $key => $val)
-			{		
+			{
 				if (preg_match("|".preg_quote($key).".*?([0-9\.]+)|i", $this->agent, $match))
 				{
 					$this->is_browser = TRUE;
@@ -193,19 +193,19 @@
 		}
 		return FALSE;
 	}
-			
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Set the Robot
 	 *
 	 * @access	private
 	 * @return	bool
-	 */		
+	 */
 	function _set_robot()
 	{
 		if (is_array($this->robots) AND count($this->robots) > 0)
-		{		
+		{
 			foreach ($this->robots as $key => $val)
 			{
 				if (preg_match("|".preg_quote($key)."|i", $this->agent))
@@ -220,17 +220,17 @@
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Set the Mobile Device
 	 *
 	 * @access	private
 	 * @return	bool
-	 */		
+	 */
 	function _set_mobile()
 	{
 		if (is_array($this->mobiles) AND count($this->mobiles) > 0)
-		{		
+		{
 			foreach ($this->mobiles as $key => $val)
 			{
 				if (FALSE !== (strpos(strtolower($this->agent), $key)))
@@ -240,261 +240,261 @@
 					return TRUE;
 				}
 			}
-		}	
+		}
 		return FALSE;
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Set the accepted languages
 	 *
 	 * @access	private
 	 * @return	void
-	 */			
+	 */
 	function _set_languages()
 	{
 		if ((count($this->languages) == 0) AND isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) AND $_SERVER['HTTP_ACCEPT_LANGUAGE'] != '')
 		{
 			$languages = preg_replace('/(;q=[0-9\.]+)/i', '', strtolower(trim($_SERVER['HTTP_ACCEPT_LANGUAGE'])));
-			
+
 			$this->languages = explode(',', $languages);
 		}
-		
+
 		if (count($this->languages) == 0)
 		{
 			$this->languages = array('Undefined');
-		}	
+		}
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Set the accepted character sets
 	 *
 	 * @access	private
 	 * @return	void
-	 */			
+	 */
 	function _set_charsets()
-	{	
+	{
 		if ((count($this->charsets) == 0) AND isset($_SERVER['HTTP_ACCEPT_CHARSET']) AND $_SERVER['HTTP_ACCEPT_CHARSET'] != '')
 		{
 			$charsets = preg_replace('/(;q=.+)/i', '', strtolower(trim($_SERVER['HTTP_ACCEPT_CHARSET'])));
-			
+
 			$this->charsets = explode(',', $charsets);
 		}
-		
+
 		if (count($this->charsets) == 0)
 		{
 			$this->charsets = array('Undefined');
-		}	
+		}
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Is Browser
 	 *
 	 * @access	public
 	 * @return	bool
-	 */		
+	 */
 	function is_browser()
 	{
 		return $this->is_browser;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Is Robot
 	 *
 	 * @access	public
 	 * @return	bool
-	 */		
+	 */
 	function is_robot()
 	{
 		return $this->is_robot;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Is Mobile
 	 *
 	 * @access	public
 	 * @return	bool
-	 */		
+	 */
 	function is_mobile()
 	{
 		return $this->is_mobile;
-	}	
+	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Is this a referral from another site?
 	 *
 	 * @access	public
 	 * @return	bool
-	 */			
+	 */
 	function is_referral()
 	{
 		return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? FALSE : TRUE;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Agent String
 	 *
 	 * @access	public
 	 * @return	string
-	 */			
+	 */
 	function agent_string()
 	{
 		return $this->agent;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get Platform
 	 *
 	 * @access	public
 	 * @return	string
-	 */			
+	 */
 	function platform()
 	{
 		return $this->platform;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get Browser Name
 	 *
 	 * @access	public
 	 * @return	string
-	 */			
+	 */
 	function browser()
 	{
 		return $this->browser;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get the Browser Version
 	 *
 	 * @access	public
 	 * @return	string
-	 */			
+	 */
 	function version()
 	{
 		return $this->version;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get The Robot Name
 	 *
 	 * @access	public
 	 * @return	string
-	 */				
+	 */
 	function robot()
 	{
 		return $this->robot;
 	}
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get the Mobile Device
 	 *
 	 * @access	public
 	 * @return	string
-	 */			
+	 */
 	function mobile()
 	{
 		return $this->mobile;
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get the referrer
 	 *
 	 * @access	public
 	 * @return	bool
-	 */			
+	 */
 	function referrer()
 	{
 		return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : trim($_SERVER['HTTP_REFERER']);
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get the accepted languages
 	 *
 	 * @access	public
 	 * @return	array
-	 */			
+	 */
 	function languages()
 	{
 		if (count($this->languages) == 0)
 		{
 			$this->_set_languages();
 		}
-	
+
 		return $this->languages;
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Get the accepted Character Sets
 	 *
 	 * @access	public
 	 * @return	array
-	 */			
+	 */
 	function charsets()
 	{
 		if (count($this->charsets) == 0)
 		{
 			$this->_set_charsets();
 		}
-	
+
 		return $this->charsets;
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Test for a particular language
 	 *
 	 * @access	public
 	 * @return	bool
-	 */			
+	 */
 	function accept_lang($lang = 'en')
 	{
 		return (in_array(strtolower($lang), $this->languages(), TRUE)) ? TRUE : FALSE;
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	/**
 	 * Test for a particular character set
 	 *
 	 * @access	public
 	 * @return	bool
-	 */			
+	 */
 	function accept_charset($charset = 'utf-8')
 	{
 		return (in_array(strtolower($charset), $this->charsets(), TRUE)) ? TRUE : FALSE;
 	}
-	
-	
+
+
 }
 
 
